const joi = require('joi')
// 定义各个属性的验证规则
//一个数字（number()）  一个整数（integer()）  最小值为1（min(1)） 
//必填项（required()） 一个字符串（string()） 一个有效的电子邮件地址（email()） 
//仅包含字母和数字（alphanum()） 长度至少为1个字符（min(1)） 长度最多为10个字符（max(10)）
//匹配正则表达式/^[\S]{6,12}$/，这意味着字符串必须是非空白字符（\S），长度在6到12个字符之间

const id = joi.number().integer().min(1).required()//用户id
const nickname = joi.string().required()//用户昵称
const email = joi.string().email().required()//用户邮箱
const username = joi.string().alphanum().min(1).max(10).required()//用户名
const password = joi.string().pattern(/^[\S]{6,12}$/).required()//用户密码

// dataUri() 指的是如下格式的字符串数据：
// 
const avatar = joi.string().dataUri().required()//用户头像

// 定义验证注册和登录表单数据的规则对象
exports.reg_login_schema = {
  body: {
    username,
    password,
  },
}

// 获取用户基本信息
exports.update_userinfo_schema = {
  body: {
    id,
    nickname,
    email
  }
}

// 验证规则对象 - 重置密码
exports.update_password_schema = {
  body: {
    // 使用 password 这个规则，验证 req.body.oldPwd 的值
    oldPwd: password,
    // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
    // 解读：
    // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
    // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
    // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
    newPwd: joi.not(joi.ref('oldPwd')).concat(password),
  },
}

// 更新头像的验证规则
exports.update_avatar_schema = {
  body: {
    avatar,
  }
}